/*
 * UtileriaBase.java	
 *
 * Copyright 2008 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 07/10/08, 12:30:38 AM
 */
package com.ufps.cuatro.util;

import com.ufps.cuatro.util.opciones.MyProperties;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import org.jdesktop.application.ResourceMap;

/**
 * <i><b>UtileriaBase:</b></i> <p>Esta Clase es la Base para la administración
 * de recursos en la Aplicación. Brinda soporte para el manejos de texto, imagenes
 * archivos y objetos de recursos.</p>
 *
 * @author  Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 07/10/08 
 */
public abstract class UtileriaBase {
    
    /**
     * Constante de Formato para iconos de 16 bits.
     */
    public final static int SIZE_ICON_16 = 16;
    /**
     * Constante de Formato para iconos de 24 bits.
     */
    public final static int SIZE_ICON_24 = 24;
    /**
     * Constante de Formato para iconos de 32 bits.
     */
    public final static int SIZE_ICON_32 = 32;
    /**
     * Constante de Formato para iconos de 48 bits.
     */
    public final static int SIZE_ICON_48 = 48;
    
    /**
     * Variable static para almacenar los Recursos en las Subclases.
     */
    private static org.jdesktop.application.ResourceMap resourceMap;    
    
    /**
     * Devuelve el Recurso de Texto Asociado a la Clave recibida en el Parametro ó
     * un Cadena vacia en Caso de no encontrarse ó presentarse un Error.
     * @param key Clave recibida.
     * @return Recurso de Texto Asociado a la Clave recibida en el Parametro.
     * @see org.jdesktop.application.ResourceMap#getString(java.lang.String, java.lang.Object[]) 
     * @throws ResourceMap.LookupException
     * @throws java.lang.IllegalArgumentException
     */
    public static String leerRecursoTexto(String key){
        try{
            if(resourceMap.containsKey(key)){
                return resourceMap.getString(key);
            }
        }catch(java.lang.NullPointerException ex){}
        return "";
        
    }

    /**
     * Devuelve el Icono de la Aplicación de acuerdo  al tamaño recibido en el Parametro.
     * @param modo 
     * @return Icono de la Aplicación de acuerdo  al tamaño recibido en el Parametro.
     * @see org.jdesktop.application.ResourceMap#getIcon(java.lang.String) 
     * @throws ResourceMap.LookupException
     * @throws java.lang.IllegalArgumentException
     */
    public static Icon leerIconoApp(int modo){
        try{
            String key = "Utileria.icono.app." + String.valueOf(modo);
            return resourceMap.getIcon(key);
        }catch(java.lang.NullPointerException ex){}
        return null;
    }

    /**
     * Devuelve el Icono de la Aplicación en Formato Imagen de acuerdo  al tamaño recibido en el Parametro.
     * @param modo 
     * @return Icono de la Aplicación en Formato Imagen de acuerdo  al tamaño recibido en el Parametro.
     * @see org.jdesktop.application.ResourceMap#getIcon(java.lang.String) 
     * @throws ResourceMap.LookupException
     * @throws java.lang.IllegalArgumentException
     */
    public static ImageIcon leerIconoAppEnImagen(int modo){
        try{
            String key = "Utileria.icono.app." + String.valueOf(modo);
            return resourceMap.getImageIcon(key);
        }catch(java.lang.NullPointerException ex){}
        return null;
    }    
    
    /**
     * Devuelve el Recurso de Gráfico de Icono Asociado a la Clave y al Tamaño recibidos 
     * en los Parametros.
     * @param key Clave recibida.
     * @param size Tamaño del Icono.
     * @return Recurso de Gráfico de Icono Asociado a la Clave y al Tamaño recibidos 
     * en los Parametros.
     * @see org.jdesktop.application.ResourceMap#getIcon(java.lang.String) 
     * @throws ResourceMap.LookupException
     * @throws java.lang.IllegalArgumentException
     */
    public static Icon leerRecursoIcono(String key, int size){
        try{
            String strPath = null;
            if(size == 16){
                strPath = key.replaceAll("32x32", "16x16");
            }
            else if(size == 32){
                strPath = key.replaceAll("16x16", "32x32");
            }    
            strPath += UtileriaBase.leerRecursoTexto(key);
            return resourceMap.getIcon(strPath);        
        }catch(java.lang.NullPointerException ex){}
        return null;
    }    
    
    /**
     * Devuelve el Recurso de Gráfico de Imagen Asociado a la Clave y al Tamaño recibidos 
     * en los Parametros.
     * @param key Clave recibida.
     * @param size Tamaño de la Imagen.
     * @return Recurso de Gráfico de Imagen Asociado a la Clave y al Tamaño recibidos 
     * en los Parametros.
     * @see org.jdesktop.application.ResourceMap#getIcon(java.lang.String) 
     * @throws ResourceMap.LookupException
     * @throws java.lang.IllegalArgumentException
     */
    public static ImageIcon leerRecursoImagen(String key, int size){        
       try{
            String strPath = "";
            if(size == UtileriaBase.SIZE_ICON_16){
                strPath = key.replaceAll("32x32", "16x16");
            }
            else if(size == UtileriaBase.SIZE_ICON_32){
                strPath = key.replaceAll("16x16", "32x32");
            }        
            return resourceMap.getImageIcon(strPath);
        }catch(java.lang.NullPointerException ex){}
         return null;
    }
    
    /**
     * Carga un Archivo Properties en el formato válido de la Aplicación
     * para la administración de este tipo de archivo.
     * @param strPath Ruta de la Ubicación del Recurso.
     * @return Archivo Properties ecansulado en un objeto <code>MyProperties</code>.
     */
    public static MyProperties cargar(String strPath){
        try{
            URL url = resourceMap.getClassLoader().getResource(strPath);
            try {
                MyProperties objPropiedades = new MyProperties(url.toURI());
                return objPropiedades;
            } catch (IOException ex) {
                Logger.getLogger(UtileriaBase.class.getName()).log(Level.SEVERE, null, ex);
            } catch (URISyntaxException ex) {
                Logger.getLogger(UtileriaBase.class.getName()).log(Level.SEVERE, null, ex);
            }
        
        }catch(java.lang.NullPointerException ex){}
        return null;
    }
    //cargarArchivoMyPropierties
    
    /**
     * Carga un Archivo Properties en el formato válido de la Aplicación
     * para la administración de este tipo de archivo.
     * @param objPath Ruta de la Ubicación del Recurso.
     * @return Archivo Properties ecansulado en un objeto <code>MyProperties</code>.
     */
    public static MyProperties cargarFileProperties(File objPath){
        try{
            try {            
                MyProperties objPropiedades = new MyProperties(objPath.toURI());
                return objPropiedades;
            } catch (IOException ex) {
                Logger.getLogger(Utileria.class.getName()).log(Level.SEVERE, null, ex);
            }         
        }catch(java.lang.NullPointerException ex){}
        return null;
    }
    
}
